#pragma once

#include <QString>
#include <QRandomGenerator>

// 前向声明
struct PlayerGameData;

// 怪物数据
struct MonsterData 
{
    quint32 level;          // 怪物等级
    quint32 health;         // 当前血量
    quint32 maxHealth;      // 最大血量
    quint32 attackPower;    // 攻击力
    quint32 defense;        // 防御力
    quint32 critChance;     // 暴击率 (百分比)
    double critMultiplier;  // 暴击倍数
    quint32 hitChance;      // 命中率 (百分比)
    quint32 dodgeChance;    // 闪避率 (百分比)
    QString name;           // 怪物名称
    
    MonsterData();
    MonsterData(quint32 playerLevel, quint32 playerAttack);

    bool isAlive() const;

    // 圆桌攻击系统 - 怪物攻击玩家
    struct AttackResult {
        bool hit;           // 是否命中
        bool critical;      // 是否暴击
        quint32 damage;     // 最终伤害
        QString message;    // 攻击描述
    };
    
    AttackResult performAttack(const PlayerGameData& target) const;
    
    // 怪物受到伤害（考虑防御）
    quint32 takeDamage(quint32 incomingDamage);

private:
    // Boss怪物生成 (10, 20, 30关)
    void generateBossMonster(quint32 playerAttack, quint32 playerMaxHealth, quint32 bossLevel);

    // 新手期怪物 (1-9关) - 很难死，让玩家学习
    void generateNovicePhaseMonster(quint32 playerAttack, quint32 playerMaxHealth);

    // 挑战期怪物 (11-19关) - 真正的战斗
    void generateChallengePhaseMonster(quint32 playerAttack, quint32 playerMaxHealth, quint32 playerLevel);

    // 终极期怪物 (21-29关) - 最高难度
    void generateUltimatePhaseMonster(quint32 playerAttack, quint32 playerMaxHealth, quint32 playerLevel);

    // 设置分阶段的怪物名称
    void setMonsterName(quint32 playerLevel);

    // 估算玩家血量（考虑30关结构化成长）
    quint32 calculatePlayerMaxHealth(quint32 playerLevel, quint32 playerAttack) const;
}; 